package priv.yangguolong.Chapter04;
/**
 * This program demonstrates parameter passing in java.
 *
 * @author Administrator
 *
 */
public class ParmTest {
public static void main(String[] args) {
	/*
	 * Test1:Methods can't modify numeric parameters
	 * 
	 */
	System.out.println("Testing tripleValue:");
	double percent = 10;
	System.out.println("Before:percnet="+percent);
	tripleValue(percent);
	System.out.println("After:percent="+percent);
	/**
	 * Test2:Methods can change the state of parameters
	 */
	System.out.println("\nTesting tripSalary:");
	Employee01 harry = new Employee01("Harry",50000);
	System.out.println("Before:salary="+harry.getSalary());
	tripleSalary(harry);
	System.out.println("After:salary="+harry.getSalary());
	
	/*
	 * Test3 : Methods can's attach new objects to object parameters 
	 */
	System.out.println("\nTesting swap:");
	Employee01 a = new Employee01("Alise",70000);
	Employee01 b = new Employee01("Bob",60000);
	System.out.println("Before:a="+a.getName());
	System.out.println("Before:b="+b.getName());
	swap(a,b);
	System.out.println("After:a="+a.getName());
	System.out.println("After:b="+b.getName());
}
public static void tripleValue(double x)//does;s work
{
	x= 3*x;
	System.out.println("End of method : x="+x);
}
public static void tripleSalary(Employee01 x)//works
{
	x.raiseSalary(200);
	System.out.println("End of methmod:salary="+x.getSalary());
}

public static void swap(Employee01 x,Employee01 y) {
	Employee01 temp = x;
	x= y;
	y= temp;
	System.out.println("End of method:x="+x.getName());
	System.out.println("End of method:y="+y.getName());
}
}

class Employee01 //simplified Employee class 
{
	private String name;
	private double salary;
	public Employee01(String n,double s) {
		name = n;
		salary = s;
	}
	public String getName() {
		return name;
		
	}
	public double getSalary() {
		return salary;
	}
	public void raiseSalary(double byPercent) {
		double raise = salary*byPercent/100;
		salary  += raise;
	}
}
